package graph;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @program: datastructureandalogorithm
 * @description:
 * @author: hmx
 * @create: 2021-12-15 15:15
 **/
public interface Graph<V, E> {

    /**
     * 打印边
     */
    void print();

    /**
     * 边的数量
     * @return
     */
    int edgeSize();

    /**
     * 顶点的数量
     * @return
     */
    int vertexSize();

    /**
     * 添加顶点
     * @param v
     */
    void addVertex(V v);

    /**
     * 添加边(无权值)
     * @param from
     * @param to
     */
    void addEdge(V from, V to);

    /**
     * 添加边(有权值)
     * @param from
     * @param to
     * @param weight
     */
    void addEdge(V from, V to, E weight);

    /**
     * 移除顶点
     * @param v
     */
    void removeVertex(V v);

    /**
     * 移除边
     * @param from
     * @param to
     */
    void removeEdge(V from, V to);

    /**
     * 拓扑排序
     * @return
     */
    List<V> topologicalSort();

}
